const tagsview = {
  state: {
    visitedviews: [],//存放所有浏览过的且不重复的路由数据
    cachedViews: []//缓存的页卡 2019/2/11本来想配合:include="cachedViews"做动态缓存，但嵌套路由缓存失败，暂时无用。
  },
  mutations: {
    ADD_VISITED_VIEWS: (state, view) => {//打开新页签--添加路由数据的方法   
      // state.visitedviews.map(item => {//带动态路由的不打开新页卡，直接path替换掉
      //   if (item.name == view.name) {
      //     item.path = view.path
      //   }
      // })
      if (state.visitedviews.some(v => v.name == view.name)) return;
      if (view.path == '/dashboard'|| view.path == '/dashboard/blank' ) return; //首次打开系统不生成首页标签
      state.visitedviews.push({
        name: view.name,
        path: view.path,
        title: view.path == '/dashboard' ? '首页' : view.meta.title,
        meta: view.meta
      })
    },
    DEL_VISITED_VIEWS: (state, view) => {//关闭页签--删除路由数据的方法
      for (let [i, v] of state.visitedviews.entries()) {
        if (v.name == view.name) {
          state.visitedviews.splice(i, 1)
          state.cachedViews.splice(i, 1)
          break
        }
      }
    },
    DEL_OTHERS_VISITED_VIEWS: (state, view) => {//关闭其他
      state.visitedviews = state.visitedviews.filter(item => { return item.name == view.name });
      state.cachedViews = state.cachedViews.filter(item => { return item == view.name });
    },
  },
  actions: {//调用这里去触发mutations，如何调用？在组件内使用this.$store.dispatch('action中对应名字', 参数)
    addVisitedViews({ commit, state }, view) {//通过解构赋值得到commit方法
      commit('ADD_VISITED_VIEWS', view)
    },
    delVisitedViews({ commit, state }, view) {//删除数组存放的路由之后，需要再去刷新路由，这是一个异步的过程，需要有回掉函数，所以使用并返回promise对象，也可以让组件在调用的时候接着使用.then的方法
      return new Promise((resolve) => {//resolve方法：未来成功后回掉的方法
        commit('DEL_VISITED_VIEWS', view);
        resolve([...state.visitedviews]);
      })
    },
    delOthersViews({ commit, state }, view) {
      commit('DEL_OTHERS_VISITED_VIEWS', view)
    },
  }
}
export default tagsview
